import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
import { moduleConfig } from './module.config';

export default defineConfig({
    plugins: [vue()],
    build: {
        // 使用配置的输出目录
        outDir: moduleConfig.getOutputDirectory(),
        emptyOutDir: true,
        lib: {
            entry: path.resolve(__dirname, 'src/index.ts'),
            formats: ['es'],
            // 使用配置的输出文件名
            fileName: () => moduleConfig.getOutputFileName()
        },
        // 替换联邦模块导入
        rollupOptions: {
            // 确保外部依赖正确配置
            external: [
                // Vue生态
                'vue', 'vue-router', 'vue-i18n', 'vue-demi', 'vue-virtual-scroller', 'vuedraggable',
                /^@vue\/.*/,
                // 状态管理
                'pinia',
                // UI组件库
                'element-plus', '@element-plus/icons-vue', /^element-plus\/.*/,
                // 工具库
                'lodash', 'moment', 'js-cookie', 'axios', 'better-mock', 'echarts',
                'split.js', 'uuid', '@microsoft/signalr',
                // 自定义组件库
                '@xc-components/common', '@xc-components/xc-form', '@xc-components/xc-table',
                // 图标相关
                '@iconify-json/ep', /^@iconify.*/,
                // 其他依赖
                'electron', 'electron-reload'
            ],
            output: {
                // 对应外部依赖的全局变量映射（平台需提供这些全局变量）
                globals: {
                    vue: 'Vue',
                    'vue-router': 'VueRouter',
                    pinia: 'Pinia',
                    'element-plus': 'ElementPlus',
                    lodash: '_',
                    axios: 'axios',
                },
                exports: 'named',
                interop: 'auto',
                // 使用配置的输出文件名
                entryFileNames: moduleConfig.getOutputFileName(),
                assetFileNames: 'assets/[name][extname]'
            },
            plugins: [
                // 使用替换插件移除联邦模块导入
                {
                    name: 'replace-federation-imports',
                    transform(code, id) {
                        if (id.includes('src/components/index.vue')) {
                            return code.replace(
                                /await import\(['"]hostModule\/hostCom['"]\)/g,
                                'Promise.resolve(window.platformComponents || {})'
                            );
                        }
                        return code;
                    }
                }
            ]
        },
        minify: false,
        sourcemap: false,
    },
})